package es.sjdigital.rv.datos.dao;

import es.sjdigital.rv.datos.connection.DbConnection;
import es.sjdigital.rv.datos.vo.ColeccionesVO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

/**
 * Permite el acceso a la tabla colecciones
 * @author jcmanso
 *
 */
public class ColeccionesDAO {

	private static final Logger log = Logger.getLogger(String.class.getName());
	
	/**
	 * 
	 * @param col Coleccion a introducir o cambiar. Id 0 si es nueva
	 * @return id del permiso
	 */
	public int setColeccion(ColeccionesVO col)  throws Error{
		log.finest("Comienzo DAO");
		int resp=0;
		DbConnection conex= new DbConnection();
		try {
			Statement db = conex.getConnection().createStatement();
			//Si nuevo permiso
			if (col.getId()==0){
				log.finest("Consulta base de datos");
				db.executeUpdate("INSERT INTO colecciones (nombre, tipo, permiso_id) VALUES('"
					+col.getNombre()+"','"
					+col.getTipo()+"','"
					+col.getPermisoId()+"')", db.RETURN_GENERATED_KEYS);
				ResultSet rs = db.getGeneratedKeys();
				if (rs != null && rs.next()) {
					resp = rs.getInt(1);
				}
				else resp = 0;
			}
			//Si no permiso existente
			else{
				String query = "UPDATE colecciones" +
						" SET nombre = '"+col.getNombre()+
						"', tipo ='"+col.getTipo()+
						"', permiso_id = '"+col.getPermisoId()+ "' WHERE colecciones.id = '"+col.getId()+"'";
				db.executeUpdate(query);
				 resp = col.getId();
			}
			db.close();
			conex.desconectar();
		} catch (SQLException e) {
			throw new Error(e);
		} catch (Exception e) {
			throw new Error(e);
		}
		log.finest("Fin DAO");
		return resp;
	}
	
	public List<String> getNombresColeccion(String busqueda) throws Error{
		log.finest("Comienzo DAO");
		//Comprobamos que busqueda no sea nulo
		if (busqueda == null) 
			busqueda = new String("");
		
		//Inicializamos el resultado
		List<String> result = new ArrayList<String>();
		
		DbConnection conex= new DbConnection();
		try {
			Statement db = conex.getConnection().createStatement();
			String query = "SELECT DISTINCT busqueda FROM colecciones WHERE nombre LIKE '%"+busqueda+"%'";
			log.finest("Consulta base de datos "+query);
			ResultSet st = db.executeQuery(query);
			
			//Guardamos los resultados
			while (st.next()){
				result.add(st.getString("busqueda"));
			}
			db.close();

		} catch (SQLException e) {
			throw new Error(e);
		} catch (Exception e) {
			throw new Error(e);
		}
		log.finest("Fin DAO");
		
		return result;
	}
	

	public List<ColeccionesVO> getColecciones(int id_busqueda) throws Error{
		log.finest("Comienzo DAO");
		
		//Inicializamos el resultado
		List<ColeccionesVO> result = new ArrayList<ColeccionesVO>();
		
		DbConnection conex= new DbConnection();
		try {
			Statement db = conex.getConnection().createStatement();
			String query = new String();
			if (id_busqueda!=0)
				query = "SELECT * FROM colecciones WHERE id = '"+id_busqueda+"'";
			else
				query = "SELECT * FROM colecciones";
			log.finest("Consulta base de datos "+query);
			ResultSet st = db.executeQuery(query);
			
			while (st.next()) {
				ColeccionesVO col = new ColeccionesVO();
				col.setId(st.getInt("id"));
				col.setNombre(st.getString("nombre"));
				col.setPermisoId(st.getInt("permiso_id"));
				col.setTipo(st.getString("tipo"));				
				result.add(col);
			}
			db.close();

		} catch (SQLException e) {
			//throw new Rv_error_dto(101, "Error actualizando la base de datos: "+e.getMessage(), "getPermisos");
		} catch (Exception e) {
			//throw new Rv_error_dto(100, "Error en el DAO: "+e.getMessage(), "getPermisos");
		}
		log.finest("Fin DAO");
		return result;
	}
	
	
}
